﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//在一个整型数组中，只有一个数字出现一次，其他数组都是成对出现的，
//请找出那个只出现一次的数字。
//例如：
//数组中有：1 2 3 4 5 1 2 3 4，只有5出现一次，其他数字都出现2次，找出5
//

int main1()
{
	int arr[] = { 1,2,3,4,5,4,3,2,1 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (int i = 0; i < sz; i++)
	{

	}
	return 0;
}

//不允许创建临时变量，交换两个整数的内容
int main2()
{
	int a = 3;
	int b = 5;
	a = a ^ b;
	b = a ^ b;//(a^b)^b = a//便于理解，故用（）
	a = a ^ b;//(a^b)^a = b
	printf("%d %d", a, b);
	return 0;
}

//%2相当于得到一个二进制位      7 % 2 = 1   7的二进制；111
//  /2相当于去除一个二进制位    7 / 2 = 3--->11
//                              3 % 2 = 1
//                              3 / 2 = 1 -->1

//写一个函数返回参数二进制中 1 的个数。
//比如： 15    0000 1111    4 个 1
//int count_bit_one(int num)
//{
//	int count = 0;
//	while (num)
//	{
//		if (num % 2 == 1)
//		{
//			count++;
//		}
//		num = num / 2;
//	}
//	return count;
//}
//
//int main()
//{
//	int num = 0;
//	scanf("%d",&num);
//	int ret = count_bit_one(num);
//	printf("%d\n", ret);
//	return 0;
//}

int count_bit_one(int num)
{
	int count = 0;
	while (num)
	{
		if (num % 2 == 1)
		{
			count++;
		}
		num = num / 2;
	}
	return count;
}

//int main3()
//{
//	unsigned int num = 0;
//	scanf("%d", &num);
//	int count = 0;
//	while (num)
//	{
//		if (num % 2 == 1)
//		{
//			count++;
//		}
//		num = num / 2;
//	}
//	printf("%d\n", count);
//	return 0;
//}

//获取一个整数二进制序列中所有的偶数位和奇数位，分别打印出二进制序列
int main()
{
	unsigned int n = 0;
	int arr1[32] = { 0 };
	int arr2[32] = { 0 };
	int b = 1;
	scanf("%d", &n);
	while (b <= 32)
	{
		int a = 0;
		if (b % 2 != 0) {
			a = n % 2;
			arr1[b - 1] = a;
		}
		else if (b % 2 == 0)
		{
			a = n % 2;
			arr2[b -1] = a;
		}
		n = n / 2;
		b++;
	}
	printf("偶数位的二进制序列为:");
	for (int i = 0; i < 32; i++)
	{
		printf("%d ", arr1[i]);
	}
	printf("\n奇数位的二进制序列为:");
	for (int i = 0; i < 32; i++)
	{
		printf("%d ", arr2[i]);
	}

	return 0;
}
